import re

def is_main_board(code: str) -> bool:
    """
    判断给定股票代码是否属于主板（沪市主板或深市主板）
    非创业板、非京股、非科创板。

    :param code: 6 位数字字符串，如 '000001'
    :return: True 表示主板；False 表示其它板块
    """
    code = code.strip()
    if not re.fullmatch(r'\d{6}', code):
        raise ValueError('股票代码必须是 6 位数字')

    # 沪市主板
    if re.match(r'60[0135]\d{3}', code):
        return True
    # 深市主板
    if re.match(r'00[0123]\d{3}', code):
        return True

    # 其余情况（创业板、科创板、京股等）均返回 False
    return False


def is_limit_up(stock_code: str, pct_change: float) -> bool:
    """
    根据股票代码和涨幅判断是否涨停
    :param stock_code: 股票代码（字符串，如 '600519' 或 '300059'）
    :param pct_change: 当日涨幅百分比（如 9.9 表示 9.9%）
    :return: bool，True 表示涨停，False 表示未涨停
    """
    # 判断ST股（涨跌幅5%）
    if stock_code.startswith(('st', 'ST', '*st', '*ST')):
        return pct_change >= 4.9  # 考虑浮点数误差

    # 判断创业板（300开头）和科创板（688开头）
    if stock_code.startswith(('300', '688', '689')):
        return pct_change >= 19.8  # 实际可能略高于20%

    # 默认主板股票（10%涨停）
    return pct_change >= 9.8  # 考虑四舍五入误差